{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from minisom import MiniSom\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.gridspec import GridSpec\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.RandomState(10)\n",
    "N_points = 20\n",
    "N_neurons = N_points*2\n",
    "x = np.random.rand(N_points)\n",
    "y = np.random.rand(N_points)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/giuseppe.vettigli/just_experiments/venv3/lib/python3.6/site-packages/minisom.py:101: UserWarning: Warning: sigma is too high for the dimension of the map.\n",
      "  warn('Warning: sigma is too high for the dimension of the map.')\n",
      "/Users/giuseppe.vettigli/just_experiments/venv3/lib/python3.6/site-packages/minisom.py:275: UserWarning: PCA initialization inappropriate:One of the dimensions of the map is 1.\n",
      "  warn(msg)\n"
     ]
    }
   ],
   "source": [
    "som = MiniSom(1, N_neurons, 2, sigma=3, neighborhood_function='triangle')\n",
    "points = np.array([x,y]).T\n",
    "som.pca_weights_init(points)\n",
    "som.train_batch(points, 1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "visit_order = np.argsort([som.winner(p)[1] for p in points])\n",
    "plt.plot(points[visit_order][:,0], points[visit_order][:,1])\n",
    "for i, p in enumerate(points[visit_order]):\n",
    "    plt.text(p[0]+.01, p[1]+.01, str(i+1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
